# __new__
class Person(object):
    def __init__(self):
        print("Person.__init__() called")

    # __new__: object基类提供的内置的静态方法
    # __new__: 作用: 在内存中为对象分配空间,返回对象的引用
    def __new__(cls):  # cls是类本身
        print("Person.__new__() called")
        return super().__new__(cls) # Python 3.0+ 可以直接使用super()而不需要指定类和实例, 一定要返回一个对象的引用

p1 = Person()

# 实例化过程: 首先执行 __new__方法, 如果没有写__new__(), 默认调用object基类里提供的__new__(),返回一个实例对象
# 然后将实例对象作为参数,执行__init__方法


# __new__ 和 __init__ 的区别:
# __new__ 是一个静态方法, 用于创建对象的实例, 返回一个对象的引用
# __init__ 是一个实例方法, 用于初始化对象的属性, 不返回任何值